SPDX-FileCopyrightText: 2014 Geoffrey Minne SPDX-FileCopyrightText: 2024 AlICe laboratory https://alicelab.be
SPDX-License-Identifier: GPL-3.0-or-later
BLENDER r60995 MANIPULATIONS D OBJETS SOUS MAC OSX
import bpy
import random
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete(use_global=False)_________________# ________________# # # # _ _ _ __ # I I I I I I I I I I I I I I I I # I I I I I I I I I I I I I I I I I # I I I I II I_I I I I I I I I_I I # I I I I I I I I I I I I I I I I # I___I I I I I I I_ I_ I I I I I I # # # # _____________PAR ALDO VAN EYCK_# _____________________#
----------------------------------# GENERER UN MODULE DE CIRCULATION # ----------------------------------#
def Circulation(pos_X, pos_Y, pos_Z, dim_X, dim_Y, dim_z):
    bpy.ops.mesh.primitive_cube_add(location=(pos_X, pos_Y, pos_Z))
    bpy.ops.transform.resize(value=(0.5, 0.5, 0.5))
brasX = random.randint(3, 4)
brasY = random.randint(4, 5)
for j in range(1, brasX):
    Circulation(j, 0, 0.5, 0.5, 0.5, 0.5)
for i in range(0, brasY):
    Circulation(0, i, 0.5, 0.5, 0.5, 0.5)Coupoles
def Coupoles(pos_X, pos_Y, pos_Z, dim_X, dim_Y, dim_z):
    bpy.ops.mesh.primitive_uv_sphere_add(location=(pos_X, pos_Y, pos_Z))
    bpy.ops.transform.resize(value=(-0.488145, -0.488145, -0.488145))
for j in range(1, brasX):
    Coupoles(j, 0, 0.9, 0.5, 0.5, 0.5)
for i in range(0, brasY):
    Coupoles(0, i, 0.9, 0.5, 0.5, 0.5)_________________#
---------------------# GENERER LE MODULE 1 # ---------------------#
def Module1(pos_X, pos_Y, pos_Z, dim_X, dim_Y, dim_z):
    bpy.ops.mesh.primitive_cube_add(location=(pos_X, pos_Y, pos_Z))
    bpy.ops.transform.resize(value=(0.5, 0.5, 0.5))def Coupoles2(pos_X, pos_Y, pos_Z, dim_X, dim_Y, dim_z):
    bpy.ops.mesh.primitive_uv_sphere_add(location=(pos_X, pos_Y, pos_Z))
    bpy.ops.transform.resize(value=(-0.488145, -0.488145, -0.488145))rdc = random.randint(5, 7)
for m in range(1, random.randint(5, 7)):
    Module1(m, 1, 0.5, 0.5, 0.5, 0.5)
    Module1(m, 2, 0.5, 0.5, 0.5, 0.5)
    Coupoles2(m, 1, 0.9, 0.5, 0.5, 0.5)
    Coupoles2(m, 2, 0.9, 0.5, 0.5, 0.5)niveau1 = random.randint(2, 3)
niveau1bis = random.randint(3, 5)
for n in range(1, niveau1):
    for q in range(1, niveau1bis):
        Module1(q, n, 1.5, 0.5, 0.5, 0.5)Coupoles2(q,n,1.9,0.5,0.5,0.5)
_________________#
-----------------------------------------# REPETER LE MODULE 1 AVEC SA CIRCULATION # -----------------------------------------#
bpy.ops.object.select_all(action="SELECT")
MaxDuplication = random.randint(4, 5)
for nombreDuplication in range(1, MaxDuplication):
    bpy.ops.object.duplicate_move(
        OBJECT_OT_duplicate={"linked": False, "mode": "TRANSLATION"},
        TRANSFORM_OT_translate={
            "value": (brasX, -brasY + 1, 0),
            "constraint_axis": (False, False, False),
            "constraint_orientation": "GLOBAL",
            "mirror": False,
            "proportional": "DISABLED",
            "proportional_edit_falloff": "SMOOTH",
            "proportional_size": 1,
            "snap": False,
            "snap_target": "CLOSEST",
            "snap_point": (0, 0, 0),
            "snap_align": False,
            "snap_normal": (0, 0, 0),
            "texture_space": False,
            "remove_on_cancel": False,
            "release_confirm": False,
        },
    )_________________# _________________#
------------------------------------# GENERER UN MODULE DE CIRCULATION 2 # ------------------------------------#
def Circulation2(pos_X, pos_Y, pos_Z, nom):
    bpy.ops.mesh.primitive_cube_add(location=(pos_X, pos_Y, pos_Z))
    bpy.ops.transform.resize(value=(0.5, 0.5, 0.5))
    bpy.context.object.name = nom
brasX2 = 4
brasY2 = random.choice([5, 6])
listBoitesBras = []brasX2
for j in range(0, brasX2):
    Circulation2(-j, 0, 0.5, "brasx" + str(j))
    listBoitesBras.append("brasx" + str(j))brasY2
for i in range(0, brasY2):
    Circulation2(-3, -i, 0.5, "brasy" + str(i))
    listBoitesBras.append("brasy" + str(i))COUPOLES
def Coupoles3(pos_X, pos_Y, pos_Z, nom2):
    bpy.ops.mesh.primitive_uv_sphere_add(location=(pos_X, pos_Y, pos_Z))
    bpy.ops.transform.resize(value=(-0.488145, -0.488145, -0.488145))
    bpy.context.object.name = nom2
listBoitesBras2 = []
for j in range(0, brasX2):
    Coupoles3(-j, 0, 0.9, "brasx2" + str(j))
    listBoitesBras2.append("brasx2" + str(j))
for i in range(0, brasY2):
    Coupoles3(-3, -i, 0.9, "brasy2" + str(i))
    listBoitesBras2.append("brasy2" + str(i))--------------------------------------# DUPLIQUER LE MODULE DE CIRCULATION 2 # --------------------------------------#
selection des cubes comprenant les bras
bpy.ops.object.select_all(action="DESELECT")
for x in range(0, len(listBoitesBras)):
    bpy.data.objects[listBoitesBras[x]].select = True
for x in range(0, len(listBoitesBras2)):
    bpy.data.objects[listBoitesBras2[x]].select = Trueduplication positive
MaxDuplication2 = random.randint(3, 5)
for nombreDuplication2 in range(1, MaxDuplication2):
    bpy.ops.object.duplicate_move(
        OBJECT_OT_duplicate={"linked": False, "mode": "TRANSLATION"},
        TRANSFORM_OT_translate={
            "value": (-brasX2 + 1, -brasY2 + 1, 0),
            "constraint_axis": (False, False, False),
            "constraint_orientation": "GLOBAL",
            "mirror": False,
            "proportional": "DISABLED",
            "proportional_edit_falloff": "SMOOTH",
            "proportional_size": 1,
            "snap": False,
            "snap_target": "CLOSEST",
            "snap_point": (0, 0, 0),
            "snap_align": False,
            "snap_normal": (0, 0, 0),
            "texture_space": False,
            "remove_on_cancel": False,
            "release_confirm": False,
        },
    )duplication negative
bpy.ops.object.select_all(action="DESELECT")
for x in range(0, len(listBoitesBras)):
    bpy.data.objects[listBoitesBras[x]].select = True
for x in range(0, len(listBoitesBras2)):
    bpy.data.objects[listBoitesBras2[x]].select = True
MaxDuplication4 = random.randint(1, 2)
for nombreDuplication2 in range(0, MaxDuplication4):
    bpy.ops.object.duplicate_move(
        OBJECT_OT_duplicate={"linked": False, "mode": "TRANSLATION"},
        TRANSFORM_OT_translate={
            "value": (brasX2 - 1, brasY2 - 1, 0),
            "constraint_axis": (False, False, False),
            "constraint_orientation": "GLOBAL",
            "mirror": False,
            "proportional": "DISABLED",
            "proportional_edit_falloff": "SMOOTH",
            "proportional_size": 1,
            "snap": False,
            "snap_target": "CLOSEST",
            "snap_point": (0, 0, 0),
            "snap_align": False,
            "snap_normal": (0, 0, 0),
            "texture_space": False,
            "remove_on_cancel": False,
            "release_confirm": False,
        },
    )_________________#
---------------------# GENERER LE MODULE 2 # ---------------------#
def Module2(pos_X, pos_Y, pos_Z):
    bpy.ops.mesh.primitive_cube_add(location=(pos_X, pos_Y, pos_Z))
    bpy.ops.transform.resize(value=(0.5, 0.5, 0.5))
Lou = random.randint(3, 5)
Module2(-Lou - 0.5, 1.5, 0.5)
bpy.ops.transform.resize(value=(Lou * 2, 2, 1))EXTRUSION
depla1 = random.randint(-2, 2)
taille1 = random.randint(2, 3)
taille2 = random.choice([1.5, 2])
taille3 = random.choice([0.5, 1])
if taille2 > 1.5:
    taille3 = 1
else:
    taille3 = 0.5
bpy.ops.object.editmode_toggle()
bpy.ops.mesh.extrude_region_move(
    MESH_OT_extrude_region={"mirror": False},
    TRANSFORM_OT_translate={
        "value": (0, 2, 0),
        "constraint_axis": (False, False, True),
        "constraint_orientation": "NORMAL",
        "mirror": False,
        "proportional": "DISABLED",
        "proportional_edit_falloff": "SMOOTH",
        "proportional_size": 1,
        "snap": False,
        "snap_target": "CLOSEST",
        "snap_point": (0, 0, 0),
        "snap_align": False,
        "snap_normal": (0, 0, 0),
        "texture_space": False,
        "remove_on_cancel": False,
        "release_confirm": False,
    },
)
bpy.ops.transform.translate(
    value=(depla1, taille2, 0),
    constraint_axis=(False, False, False),
    constraint_orientation="VIEW",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SPHERE",
    proportional_size=1.1,
)
bpy.ops.transform.resize(
    value=(taille1 / 6, taille3, 1),
    constraint_axis=(False, False, False),
    constraint_orientation="VIEW",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SPHERE",
    proportional_size=1.1,
)
bpy.ops.object.editmode_toggle()-----------------------# DUPLIQUER LE MODULE 2 # -----------------------#
(Selon le nombre Maximum de duplication du module de circulation 2 !!!)
duplication positive
for nombreDuplication5 in range(1, MaxDuplication2 + 1):
    bpy.ops.object.duplicate_move(
        OBJECT_OT_duplicate={"linked": False, "mode": "TRANSLATION"},
        TRANSFORM_OT_translate={
            "value": (-brasX2 + 1, -brasY2 + 1, 0),
            "constraint_axis": (False, False, False),
            "constraint_orientation": "GLOBAL",
            "mirror": False,
            "proportional": "DISABLED",
            "proportional_edit_falloff": "SMOOTH",
            "proportional_size": 1,
            "snap": False,
            "snap_target": "CLOSEST",
            "snap_point": (0, 0, 0),
            "snap_align": False,
            "snap_normal": (0, 0, 0),
            "texture_space": False,
            "remove_on_cancel": False,
            "release_confirm": False,
        },
    )duplication negative
bpy.ops.object.duplicate_move(
    OBJECT_OT_duplicate={"linked": False, "mode": "TRANSLATION"},
    TRANSFORM_OT_translate={
        "value": (
            (brasX2 - 1) * (MaxDuplication2 + 1),
            (brasY2 - 1) * (MaxDuplication2 + 1),
            0,
        ),
        "constraint_axis": (False, False, False),
        "constraint_orientation": "GLOBAL",
        "mirror": False,
        "proportional": "DISABLED",
        "proportional_edit_falloff": "SMOOTH",
        "proportional_size": 1,
        "snap": False,
        "snap_target": "CLOSEST",
        "snap_point": (0, 0, 0),
        "snap_align": False,
        "snap_normal": (0, 0, 0),
        "texture_space": False,
        "remove_on_cancel": False,
        "release_confirm": False,
    },
)
for nombreDuplication6 in range(0, MaxDuplication4 - 1):
    bpy.ops.object.duplicate_move(
        OBJECT_OT_duplicate={"linked": False, "mode": "TRANSLATION"},
        TRANSFORM_OT_translate={
            "value": (brasX2 - 1, brasY2 - 1, 0),
            "constraint_axis": (False, False, False),
            "constraint_orientation": "GLOBAL",
            "mirror": False,
            "proportional": "DISABLED",
            "proportional_edit_falloff": "SMOOTH",
            "proportional_size": 1,
            "snap": False,
            "snap_target": "CLOSEST",
            "snap_point": (0, 0, 0),
            "snap_align": False,
            "snap_normal": (0, 0, 0),
            "texture_space": False,
            "remove_on_cancel": False,
            "release_confirm": False,
        },
    )-----------------------# DEUXIEME EXCROISSANCE # -----------------------#
if brasY2 is 6:
    bpy.ops.mesh.primitive_cube_add(
        radius=1,
        view_align=False,
        enter_editmode=False,
        location=(0, 0, 0.5),
        layers=(
            True,
            False,
            False,
            False,
            False,
            False,
            False,
            False,
            False,
            False,
            False,
            False,
            False,
            False,
            False,
            False,
            False,
            False,
            False,
            False,
        ),
    )
    bpy.ops.transform.resize(
        value=(1, 0.5, 0.5),
        constraint_axis=(False, False, False),
        constraint_orientation="GLOBAL",
        mirror=False,
        proportional="DISABLED",
        proportional_edit_falloff="SMOOTH",
        proportional_size=1,
    )
    bpy.ops.transform.translate(
        value=(-5, 0, 0),
        constraint_axis=(False, False, False),
        constraint_orientation="GLOBAL",
        mirror=False,
        proportional="DISABLED",
        proportional_edit_falloff="SMOOTH",
        proportional_size=1,
    )
    for nombreDuplication6 in range(1, MaxDuplication2 + 1):
        bpy.ops.object.duplicate_move(
            OBJECT_OT_duplicate={"linked": False, "mode": "TRANSLATION"},
            TRANSFORM_OT_translate={
                "value": (-brasX2 + 1, -brasY2 + 1, 0),
                "constraint_axis": (False, False, False),
                "constraint_orientation": "GLOBAL",
                "mirror": False,
                "proportional": "DISABLED",
                "proportional_edit_falloff": "SMOOTH",
                "proportional_size": 1,
                "snap": False,
                "snap_target": "CLOSEST",
                "snap_point": (0, 0, 0),
                "snap_align": False,
                "snap_normal": (0, 0, 0),
                "texture_space": False,
                "remove_on_cancel": False,
                "release_confirm": False,
            },
        )
    bpy.ops.object.duplicate_move(
        OBJECT_OT_duplicate={"linked": False, "mode": "TRANSLATION"},
        TRANSFORM_OT_translate={
            "value": (
                (brasX2 - 1) * (MaxDuplication2 + 1),
                (brasY2 - 1) * (MaxDuplication2 + 1),
                0,
            ),
            "constraint_axis": (False, False, False),
            "constraint_orientation": "GLOBAL",
            "mirror": False,
            "proportional": "DISABLED",
            "proportional_edit_falloff": "SMOOTH",
            "proportional_size": 1,
            "snap": False,
            "snap_target": "CLOSEST",
            "snap_point": (0, 0, 0),
            "snap_align": False,
            "snap_normal": (0, 0, 0),
            "texture_space": False,
            "remove_on_cancel": False,
            "release_confirm": False,
        },
    )
    for nombreDuplication6 in range(0, MaxDuplication4 - 1):
        bpy.ops.object.duplicate_move(
            OBJECT_OT_duplicate={"linked": False, "mode": "TRANSLATION"},
            TRANSFORM_OT_translate={
                "value": (brasX2 - 1, brasY2 - 1, 0),
                "constraint_axis": (False, False, False),
                "constraint_orientation": "GLOBAL",
                "mirror": False,
                "proportional": "DISABLED",
                "proportional_edit_falloff": "SMOOTH",
                "proportional_size": 1,
                "snap": False,
                "snap_target": "CLOSEST",
                "snap_point": (0, 0, 0),
                "snap_align": False,
                "snap_normal": (0, 0, 0),
                "texture_space": False,
                "remove_on_cancel": False,
                "release_confirm": False,
            },
        )----------# COUPOLES # ----------#
def Coupoles4(pos_X, pos_Y, pos_Z, nom4):
    bpy.ops.mesh.primitive_uv_sphere_add(location=(pos_X, pos_Y, pos_Z))
    bpy.ops.transform.resize(value=(-0.488145, -0.488145, -0.488145))
    bpy.context.object.name = nom4
listBoitesBras3 = []
listBoitesBras4 = []
for w in range(1, Lou * 2 + 1):
    Coupoles4(-w, 2, 0.9, "brasx3" + str(w))
    listBoitesBras3.append("brasx3" + str(w))
for v in range(1, Lou * 2 + 1):
    Coupoles4(-v, 1, 0.9, "brasx4" + str(v))
    listBoitesBras4.append("brasx4" + str(v))dupliquer les coupoles
for x in range(0, len(listBoitesBras3)):
    bpy.data.objects[listBoitesBras3[x]].select = True
for x in range(0, len(listBoitesBras4)):
    bpy.data.objects[listBoitesBras4[x]].select = Truepositif
for nombreDuplication5 in range(1, MaxDuplication2 + 1):
    bpy.ops.object.duplicate_move(
        OBJECT_OT_duplicate={"linked": False, "mode": "TRANSLATION"},
        TRANSFORM_OT_translate={
            "value": (-brasX2 + 1, -brasY2 + 1, 0),
            "constraint_axis": (False, False, False),
            "constraint_orientation": "GLOBAL",
            "mirror": False,
            "proportional": "DISABLED",
            "proportional_edit_falloff": "SMOOTH",
            "proportional_size": 1,
            "snap": False,
            "snap_target": "CLOSEST",
            "snap_point": (0, 0, 0),
            "snap_align": False,
            "snap_normal": (0, 0, 0),
            "texture_space": False,
            "remove_on_cancel": False,
            "release_confirm": False,
        },
    )negatif
bpy.ops.object.duplicate_move(
    OBJECT_OT_duplicate={"linked": False, "mode": "TRANSLATION"},
    TRANSFORM_OT_translate={
        "value": (
            (brasX2 - 1) * (MaxDuplication2 + 1),
            (brasY2 - 1) * (MaxDuplication2 + 1),
            0,
        ),
        "constraint_axis": (False, False, False),
        "constraint_orientation": "GLOBAL",
        "mirror": False,
        "proportional": "DISABLED",
        "proportional_edit_falloff": "SMOOTH",
        "proportional_size": 1,
        "snap": False,
        "snap_target": "CLOSEST",
        "snap_point": (0, 0, 0),
        "snap_align": False,
        "snap_normal": (0, 0, 0),
        "texture_space": False,
        "remove_on_cancel": False,
        "release_confirm": False,
    },
)
for nombreDuplication6 in range(0, MaxDuplication4 - 1):
    bpy.ops.object.duplicate_move(
        OBJECT_OT_duplicate={"linked": False, "mode": "TRANSLATION"},
        TRANSFORM_OT_translate={
            "value": (brasX2 - 1, brasY2 - 1, 0),
            "constraint_axis": (False, False, False),
            "constraint_orientation": "GLOBAL",
            "mirror": False,
            "proportional": "DISABLED",
            "proportional_edit_falloff": "SMOOTH",
            "proportional_size": 1,
            "snap": False,
            "snap_target": "CLOSEST",
            "snap_point": (0, 0, 0),
            "snap_align": False,
            "snap_normal": (0, 0, 0),
            "texture_space": False,
            "remove_on_cancel": False,
            "release_confirm": False,
        },
    )_________________# _________________# _________________# _________________# _________________# _________________#
-----------------------------# CREATION DES ZONES COMMUNES # -----------------------------#
Barrette gauche 1
bpy.ops.mesh.primitive_cube_add(
    view_align=False,
    enter_editmode=False,
    location=(0, 0, 0.5),
    layers=(
        True,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
    ),
)
bpy.ops.transform.resize(
    value=(1, 4, 0.5),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)
bpy.ops.transform.translate(
    value=(brasX + 0.5, -brasY - 2.5, 0),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)Coupoles
for n in range(1, 3):
    for q in range(1, 8):
        Coupoles2(n + (brasX + 0.5) - 1.5, q + (-brasY / 2 - 2.5) - 6.5, 0.9, 1, 1, 1)__________________#
Barrette gauche 2
bpy.ops.mesh.primitive_cube_add(
    view_align=False,
    enter_editmode=False,
    location=(0, 0, 0.5),
    layers=(
        True,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
    ),
)
bpy.ops.transform.resize(
    value=(1, 2, 0.5),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)
bpy.ops.transform.translate(
    value=((brasX * 2) + 0.5, (-brasY * 2) - 0.5, 0),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)Coupoles
for n in range(1, 3):
    for q in range(1, 5):
        Coupoles2(n + (brasX * 2) - 1, q + (-brasY * 2) - 3, 0.9, 1, 1, 1)__________________#
Barrette gauche 3
test2 = random.choice([0.5, 1])
if brasX > 3:
    test2 is 1
else:
    test2 is 0.5
bpy.ops.mesh.primitive_cube_add(
    view_align=False,
    enter_editmode=False,
    location=(0, 0, 0.5),
    layers=(
        True,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
    ),
)
bpy.ops.transform.resize(
    value=(test2, 1, 0.5),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)
bpy.ops.transform.translate(
    value=((brasX * 1.5) + 0.5, (-brasY * 1.5) - 1.5, 0),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)__________________#
Barrette gauche 4
test3 = random.choice([3, 4, 5, 6])
bpy.ops.mesh.primitive_cube_add(
    view_align=False,
    enter_editmode=False,
    location=(0, 0, 0.5),
    layers=(
        True,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
    ),
)
bpy.ops.transform.resize(
    value=(test3, 1, 0.5),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)
bpy.ops.transform.translate(
    value=((brasX * 2), (-brasY * 2.5) - 1, 0),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)
LouMarine = random.choice([9, 10])
if test3 > 5:
    LouMarine = 11Coupoles
for n in range(1, LouMarine):
    for q in range(1, 3):
        Coupoles2(n + (brasX * 2) - 5, q + (-brasY * 2.5) - 2.5, 0.9, 1, 1, 1)____________________#
Barette droite 1
test = random.choice([1, 2.5])
bpy.ops.mesh.primitive_cube_add(
    view_align=False,
    enter_editmode=False,
    location=(0, 0, 0.5),
    layers=(
        True,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
    ),
)
bpy.ops.transform.resize(
    value=(1, 4, 0.5),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)
bpy.ops.transform.translate(
    value=((-brasX2 * 1) - 0.5, (-brasY2 * 1) - 3.5, 0),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)Coupoles
for n in range(1, 3):
    for q in range(1, 10):
        Coupoles2(n + (-brasX2 * 2) + 2, q + (-brasY2 * 2) - 3, 0.9, 1, 1, 1)____________________#
Barette droite 2
bpy.ops.mesh.primitive_cube_add(
    view_align=False,
    enter_editmode=False,
    location=(0, 0, 0.5),
    layers=(
        True,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
    ),
)
bpy.ops.transform.resize(
    value=(0.5, 3, 0.5),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)
bpy.ops.transform.translate(
    value=((-brasX2 * 2), (-brasY2 * 2) - 1.5, 0),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)Coupoles
for n in range(1, 2):
    for q in range(1, 7):
        Coupoles2(n + (-brasX2 * 2) - 1, q + (-brasY2 * 2) - 5, 0.9, 1, 1, 1)____________________#
Barette droite 3
bpy.ops.mesh.primitive_cube_add(
    view_align=False,
    enter_editmode=False,
    location=(0, 0, 0.5),
    layers=(
        True,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
    ),
)
bpy.ops.transform.resize(
    value=(3, 1, 0.5),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)
bpy.ops.transform.translate(
    value=((-brasX2 * 1) - 0.5, (-brasY2 * 1.5) - 6, 0),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)Coupoles
for n in range(1, 7):
    for q in range(1, 3):
        Coupoles2(n + (-brasX2 * 1) - 4, q + (-brasY2 * 1.5) - 7.5, 0.9, 1, 1, 1)____________________#
Barrete bas 1
taille1 = random.choice([1, 2])
bpy.ops.mesh.primitive_cube_add(
    view_align=False,
    enter_editmode=False,
    location=(0, 0, 0.5),
    layers=(
        True,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
    ),
)
bpy.ops.transform.resize(
    value=(2, 2, 0.5),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)
bpy.ops.transform.translate(
    value=((brasX2 * 2) - 3.5, (brasY2 * 2) - 4.5, 0),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)Coupoles
for n in range(1, 5):
    for q in range(1, 5):
        Coupoles2(n + (brasX2 * 2) - 6, q + (brasY2 * 2) - 7, 0.9, 1, 1, 1)_________________# _________________# _________________# _________________# _________________# _________________#
---------------------------------# CREATION DE LA GALETTE NIVEAU 1 # ---------------------------------#
epaisseur = random.choice([0.5, 1])
positionY = random.choice([0, 1, 2, 3, 4])
positionX = random.choice([3, 4, 5])
longueur = random.choice([5, 6])
bpy.ops.mesh.primitive_cube_add(
    view_align=False,
    enter_editmode=False,
    location=(0, 0, 0.5),
    layers=(
        True,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
        False,
    ),
)
bpy.ops.transform.resize(
    value=(longueur, epaisseur, 0.5),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)
bpy.ops.transform.translate(
    value=((-brasX2) + positionX, (-brasY2) - positionY, 1),
    constraint_axis=(False, False, False),
    constraint_orientation="GLOBAL",
    mirror=False,
    proportional="DISABLED",
    proportional_edit_falloff="SMOOTH",
    proportional_size=1,
)
bpy.ops.object.select_all(action="DESELECT")